/**
 * \file	Hache.h
 * \brief	Définition du foncteur utilisé par Table.
 * \author	Thibaut ALGRIN
 * \author	Emmanuel CARRE
 * \version	0.1
 * \date	Décembre 2011
 */

#ifndef		__HACHE_H__
# define	__HACHE_H__

#include <string>

namespace tp3
{
	/*
	 * \class Hache
	 * \brief Classe permettant de Hacher un paramettre en clé pourl'introduire dans la table de Hache
	 */
	class	Hache
	{
		unsigned int	size;
	public:
		/*
		 * \brief Constructeur de la classe Hache
		 * \fn Hache(unsigned int size = 100)
		 * \param unsigned int
		 */
		Hache(unsigned int size = 100);
		/*
		 * \brief Destructeur de la classe Hache
		 */
		~Hache();
		/*
		 * \brief Surcharge de l'operateur ()
		 * \fn unsigned int operator() (const int			& clef)	const
		 * \param const int
		 * \return unsigned int
		 */
		unsigned int operator() (const int			& clef)	const;
		/*
		 * \brief Surcharge de l'operateur ()
		 * \fn unsigned int operator() (const double			& clef)	const
		 * \param const double
		 * \return unsigned int
		 */
		unsigned int operator() (const double		& clef)	const;
		/*
		 * \brief Surcharge de l'operateur ()
		 * \fn unsigned int operator() (const char			& clef)	const
		 * \param const char
		 * \return unsigned int
		 */
		unsigned int operator() (const char			& clef)	const;
		/*
		 * \brief Surcharge de l'operateur ()
		 * \fn unsigned int operator() (const std::string			& clef)	const
		 * \param const std::string
		 * \return unsigned int
		 */
		unsigned int operator() (const std::string	& clef)	const;
	};

}

#endif
